#if !defined(_APP_DEVICE_H)
#define _APP_DEVICE_H
#include "app_message.h"
#include "app_buffer.h"
#include <pthread.h>

// 设备类型
typedef enum
{
    DEV_GENERAL, // 通用设备
    DEV_SERIAL, // 串口设备
    DEV_USB, // USB设备
}DeviceType;

struct DeviceFuns;

// 通用设备结构体
typedef struct
{
    char *filname; // 设备文件名
    int fd;        // 文件描述符
    ConnectionType conn_type; // 连接类型
    DeviceType dev_type; // 设备类型
    Buffer *read_buffer; // 设备读缓存
    Buffer *write_buffer; // 设备写缓存
    pthread_t read_thread; // 设备读线程
    int running; // 标识设备读线程是否在运行  0：停止  1：运行
    struct DeviceFuns *funs; // 设备相关函数
    long last_write_time; // 最后一次写入数据的时间
} Device;

// 包含设备相关函数（由子模块或其它模块实现）的结构体
struct DeviceFuns
{
    // 读取设备数据的后置函数
    int (*post_read)(Device *, char *, int );
    // 写入设备数据的前置函数
    int (*pre_write)(Device *, char *, int);
    // 发送消息
    int (*send_msg)(Device *, char *, int);
};
/**
 * 初始化设备
 */
Device *app_device_init(char *filname);
/**
 * 启动设备
 */
int app_device_start(Device *device);
/**
 * 停止设备
 */
int app_device_stop(Device *device);
/**
 * 关闭（释放）设备
 */
void app_device_close(Device *device);

/**
 * 接收处理数据
 */
int app_device_recvMessage(Device *device, char *data, int len);

#endif // _APP_DEVICE_H)
